অ্যাপাচি আইভি (Apache Ivy) একটি ডিপেন্ডেন্সি ম্যানেজমেন্ট টুল যা জাভা প্রোজেক্টের লাইব্রেরি এবং ডিপেন্ডেন্সি পরিচালনা করতে ব্যবহৃত হয়। যখন আপনার প্রকল্পটি multi-module হয়, তখন আইভি সাহায্য করে একাধিক মডিউলগুলির মধ্যে ডিপেন্ডেন্সি ম্যানেজমেন্ট ও রেজোলিউশন পরিচালনা করতে। Multi-module project এমন একটি প্রোজেক্ট, যা একাধিক সাব-মডিউল বা সাব-প্রকল্প নিয়ে গঠিত থাকে। প্রতিটি সাব-মডিউল একটি আলাদা ইউনিট হিসেবে কাজ করে, কিন্তু একে অন্যের উপর নির্ভরশীল থাকে।
আইভি একটি কেন্দ্রীভূত ডিপেন্ডেন্সি ম্যানেজমেন্ট সিস্টেম প্রদান করে যা একাধিক মডিউলের জন্য ডিপেন্ডেন্সি সংগ্রহ ও রেজোলিউশন সহজ করে তোলে। এটি মডিউলগুলির মধ্যে সম্পর্ক এবং তাদের নির্ভরশীলতা সঠিকভাবে পরিচালনা করতে সাহায্য করে।
আইভি এই সমস্যাগুলোর সমাধান করতে সাহায্য করে এবং মাল্টি-মডিউল প্রোজেক্টের মধ্যে ডিপেন্ডেন্সি সঠিকভাবে রেজোলভ করে।
আইভিতে মাল্টি-মডিউল প্রকল্পের জন্য প্রতিটি মডিউলের জন্য আলাদা ivy.xml ফাইল থাকতে হয় এবং প্রতিটি মডিউলকে তার নির্ভরশীলতার জন্য কেন্দ্রীভূত repository থেকে ডিপেন্ডেন্সি সংগ্রহ করতে হয়।
ধরা যাক, একটি মাল্টি-মডিউল প্রোজেক্টে দুটি মডিউল রয়েছে: core এবং app। এখানে, app মডিউলটি core মডিউলের উপর নির্ভরশীল। আমরা এই মডিউলগুলির জন্য ivy.xml কনফিগারেশন তৈরি করব।
my-multi-module-project/
├── ivy.xml
├── core/
│ └── ivy.xml
└── app/
└── ivy.xml
প্রথমে, রুট প্রকল্পের জন্য একটি ivy.xml ফাইল তৈরি করা হবে, যাতে সমস্ত মডিউলের নির্ভরশীলতা এবং রিপোজিটরি নির্ধারণ করা থাকে।
<ivy-module version="2.0">
<info organisation="com.example" module="my-multi-module-project" revision="1.0"/>
<repositories>
<repository name="central" url="https://repo.maven.apache.org/maven2"/>
</repositories>
<dependencies>
<dependency org="com.example" name="core" rev="1.0"/>
</dependencies>
</ivy-module>
এখানে:
core মডিউলের জন্য একটি আলাদা ivy.xml ফাইল থাকবে, যেখানে এই মডিউলের ডিপেন্ডেন্সি নির্ধারণ করা হবে।
<ivy-module version="2.0">
<info organisation="com.example" module="core" revision="1.0"/>
<repositories>
<repository name="central" url="https://repo.maven.apache.org/maven2"/>
</repositories>
<dependencies>
<!-- Core module does not have any dependencies yet -->
</dependencies>
</ivy-module>
এখানে:
app মডিউলটি core মডিউলের উপর নির্ভরশীল, তাই app/ivy.xml ফাইলে core মডিউলটির ডিপেন্ডেন্সি উল্লেখ করতে হবে।
<ivy-module version="2.0">
<info organisation="com.example" module="app" revision="1.0"/>
<repositories>
<repository name="central" url="https://repo.maven.apache.org/maven2"/>
</repositories>
<dependencies>
<dependency org="com.example" name="core" rev="1.0"/>
</dependencies>
</ivy-module>
এখানে:
আইভি মাল্টি-মডিউল প্রোজেক্টের জন্য retrieve টাস্ক ব্যবহার করে সমস্ত ডিপেন্ডেন্সি সংগ্রহ করতে পারে। ivy:retrieve
টাস্কটি ivy.xml ফাইল থেকে সমস্ত ডিপেন্ডেন্সি রিট্রিভ করে এবং এগুলিকে নির্দিষ্ট ডিরেক্টরিতে ডাউনলোড করে রাখে।
<project name="IvyRetrieveMultiModule" default="retrieveDependencies">
<target name="retrieveDependencies">
<!-- Retrieve all dependencies for multi-module project -->
<ivy:retrieve/>
</target>
</project>
এটি সমস্ত মডিউলের জন্য ডিপেন্ডেন্সি রিট্রিভ করবে এবং লোকাল ক্যাশে বা সুনির্দিষ্ট ডিরেক্টরিতে লাইব্রেরি সংরক্ষণ করবে।
আইভি resolve টাস্ক ব্যবহার করে নির্দিষ্ট ডিপেন্ডেন্সি রেজলভ করা যায়। মাল্টি-মডিউল প্রোজেক্টে, resolve টাস্কটি প্রত্যেকটি মডিউলের জন্য ডিপেন্ডেন্সি রেজলভ করবে।
<project name="IvyResolveMultiModule" default="resolveDependencies">
<target name="resolveDependencies">
<!-- Resolve dependencies for multi-module project -->
<ivy:resolve/>
</target>
</project>
এটি ivy.xml ফাইল থেকে সমস্ত ডিপেন্ডেন্সি রেজলভ করবে এবং মডিউলগুলির মধ্যে সম্পর্ক স্থাপন করবে।
Apache Ivy মাল্টি-মডিউল প্রোজেক্টের জন্য একটি শক্তিশালী ডিপেন্ডেন্সি ম্যানেজমেন্ট টুল। এটি ivy.xml ফাইল ব্যবহার করে একাধিক মডিউলের মধ্যে ডিপেন্ডেন্সি রেজোলিউশন এবং সংগ্রহকে সহজ করে তোলে। আপনি ivy:retrieve, ivy:resolve টাস্ক এবং Maven Resolver কনফিগারেশন ব্যবহার করে আপনার প্রকল্পের জন্য সমস্ত ডিপেন্ডেন্সি এবং লাইব্রেরি সংগ্রহ করতে পারেন। Multi-module Project ব্যবস্থাপনা আইভির মাধ্যমে সহজ, স্কেলেবল এবং কার্যকরী হয়ে ওঠে।
অ্যাপাচি আইভি (Apache Ivy) একটি শক্তিশালী ডিপেনডেন্সি ম্যানেজমেন্ট টুল যা বিশেষ করে Java প্রোজেক্টের জন্য ব্যবহৃত হয়। এটি multi-module প্রোজেক্ট পরিচালনা করার জন্যও বেশ উপযোগী। Multi-module প্রজেক্ট এমন একটি প্রোজেক্ট যেখানে একাধিক সাব-মডিউল থাকে এবং প্রতিটি সাব-মডিউল আলাদাভাবে পরিচালনা করা হয়।
এখানে, আমরা আলোচনা করব কিভাবে অ্যাপাচি আইভি ব্যবহার করে multi-module প্রজেক্ট পরিচালনা করা যায় এবং এই ধরনের প্রোজেক্টের জন্য প্রয়োজনীয় কনফিগারেশনগুলি কীভাবে সেটআপ করতে হয়।
Multi-module project হল একটি প্রোজেক্ট যেখানে একাধিক সাব-মডিউল বা উপ-প্রোজেক্ট থাকে। সাধারণত, এই ধরনের প্রোজেক্টে প্রতিটি মডিউল নিজে একটি স্বাধীন প্রোজেক্ট হিসেবে কাজ করে, তবে তারা একটি মূল প্রোজেক্টের অংশ হিসেবে একসাথে কাজ করে।
একটি উদাহরণ হিসেবে, ধরুন আপনার একটি মূল parent-project
রয়েছে এবং এর মধ্যে দুটি সাব-মডিউল module-a
এবং module-b
আছে। প্রতিটি মডিউল তার নিজস্ব ডিপেনডেন্সি এবং কনফিগারেশন থাকতে পারে, তবে তারা একে অপরের সাথে নির্ভরশীল হতে পারে।
আইভি দিয়ে multi-module প্রোজেক্ট পরিচালনা করার জন্য আপনাকে কয়েকটি কনফিগারেশন ফাইল সেটআপ করতে হবে, যেমন ivy.xml
, ivysettings.xml
, এবং সাব-মডিউলের জন্য আলাদা কনফিগারেশন ফাইল।
ivy.xml
কনফিগারেশনপ্রথমে, মূল প্রোজেক্ট (parent module) এর জন্য ivy.xml
ফাইল তৈরি করুন। এতে সমস্ত সাব-মডিউল এবং তাদের ডিপেনডেন্সি উল্লেখ করতে হবে।
<ivy-module version="2.0">
<info organisation="com.example" module="parent-project" revision="1.0"/>
<!-- Dependencies for the parent project -->
<dependencies>
<dependency org="com.example" name="module-a" rev="1.0"/>
<dependency org="com.example" name="module-b" rev="1.0"/>
</dependencies>
</ivy-module>
এখানে, parent-project মডিউলটি module-a এবং module-b নামক দুটি মডিউলকে ডিপেনডেন্সি হিসেবে অন্তর্ভুক্ত করছে।
ivy.xml
কনফিগারেশনপ্রতিটি সাব-মডিউল (যেমন module-a এবং module-b) এর নিজস্ব ivy.xml
ফাইল থাকতে হবে, যেখানে সাব-মডিউলের ডিপেনডেন্সি এবং প্রকাশের তথ্য থাকবে।
Module A এর ivy.xml
উদাহরণ:
<ivy-module version="2.0">
<info organisation="com.example" module="module-a" revision="1.0"/>
<dependencies>
<dependency org="com.example" name="module-b" rev="1.0"/>
</dependencies>
</ivy-module>
এখানে, module-a module-b এর উপর নির্ভরশীল।
Module B এর ivy.xml
উদাহরণ:
<ivy-module version="2.0">
<info organisation="com.example" module="module-b" revision="1.0"/>
<dependencies>
<!-- Add any dependencies for module-b -->
</dependencies>
</ivy-module>
Module B এর জন্য এখানে কোন অতিরিক্ত ডিপেনডেন্সি নেই, তবে আপনি এটি নির্দিষ্ট করতে পারেন।
Ivysettings.xml ফাইলটি রেপোজিটরি, ক্যাশ, এবং রেজলভার কনফিগার করার জন্য ব্যবহৃত হয়। এটি মূলত সমস্ত মডিউলের জন্য ডিপেনডেন্সি সংগ্রহের জন্য একটি কেন্দ্রীয় কনফিগারেশন।
<ivysettings>
<resolvers>
<resolver name="central" class="org.apache.ivy.plugins.resolver.URLResolver">
<url value="https://repo1.maven.org/maven2"/>
</resolver>
</resolvers>
<cache name="default-cache" path="${user.home}/.ivy2/cache"/>
</ivysettings>
এখানে, Maven Central Repository থেকে ডিপেনডেন্সি ডাউনলোড করার জন্য URLResolver
ব্যবহার করা হচ্ছে।
এখন আপনি চাইলে মূল প্রোজেক্টে retrieve টাস্ক চালিয়ে সমস্ত ডিপেনডেন্সি রিট্রিভ করতে পারেন।
<target name="retrieve-dependencies">
<ivy:retrieve/>
</target>
এই টাস্কটি মূল প্রোজেক্ট এবং সাব-মডিউলগুলো থেকে সমস্ত ডিপেনডেন্সি সংগ্রহ করবে এবং আইভির ক্যাশে সংরক্ষণ করবে।
যেহেতু Apache Ivy মূলত Apache Ant এর সাথে ব্যবহৃত হয়, তাই আপনি Ant ব্যবহার করে বিল্ড টাস্কগুলি পরিচালনা করবেন। Ant ফাইলগুলিতে বিভিন্ন সাব-মডিউলগুলির বিল্ড এবং ডিপেনডেন্সি রিট্রিভাল নির্ধারণ করা যেতে পারে।
<project name="multi-module-project" basedir="." default="retrieve-dependencies">
<target name="retrieve-dependencies">
<ivy:retrieve/>
</target>
<!-- Add other build targets as necessary -->
</project>
এখন আপনার multi-module প্রোজেক্টে, যখন আপনি retrieve-dependencies
টাস্ক চালাবেন, এটি সমস্ত সাব-মডিউলের ডিপেনডেন্সি রিট্রিভ করবে এবং সেগুলি লোকাল ক্যাশে সঞ্চিত থাকবে। এরপর, আপনি Ant ব্যবহার করে প্রয়োজনীয় বিল্ড টাস্কগুলি চালাতে পারেন।
এইভাবে আপনি Ivy ব্যবহার করে একটি multi-module project কার্যকরভাবে পরিচালনা করতে পারেন, যেখানে একাধিক মডিউল একে অপরের উপর নির্ভরশীল থাকে এবং সমস্ত ডিপেনডেন্সি সমন্বিতভাবে পরিচালিত হয়।
অ্যাপাচি আইভি (Apache Ivy) ডিপেনডেন্সি ম্যানেজমেন্ট টুল যা Java প্রোজেক্টে ব্যবহৃত লাইব্রেরি এবং ডিপেনডেন্সি রেজলভেশনকে সহজ করে তোলে। Parent-Child Module কনফিগারেশন আইভি ব্যবহার করার একটি গুরুত্বপূর্ণ কৌশল, যেখানে একটি প্রোজেক্টের প্যারেন্ট মডিউল এবং তার চাইল্ড মডিউলের মধ্যে ডিপেনডেন্সি শেয়ার করা হয়।
Parent-Child মডিউল কনফিগারেশন একটি সাধারণ অ্যাপ্লিকেশন আর্কিটেকচার, যেখানে একটি প্রধান (প্যারেন্ট) মডিউল থাকবে এবং তার অধীনে একাধিক সাব-প্রজেক্ট বা চাইল্ড মডিউল থাকবে। এই কনফিগারেশনটি ব্যবহার করার মাধ্যমে আপনি আপনার প্রোজেক্টের বিভিন্ন মডিউলের ডিপেনডেন্সি সমন্বয় করতে পারেন এবং একাধিক মডিউলের মধ্যে ডিপেনডেন্সি ম্যানেজমেন্টকে সহজতর করতে পারেন।
Parent Module হল একটি মডিউল যা বিভিন্ন চাইল্ড মডিউলের ডিপেনডেন্সি এবং কনফিগারেশন পরিচালনা করে। এটি ডিপেনডেন্সি হ্যান্ডলিং এবং মডিউল কনফিগারেশনের জন্য কেন্দ্রীয় ভূমিকা পালন করে। Child Modules হল প্যারেন্ট মডিউল থেকে নির্দিষ্ট ডিপেনডেন্সি গ্রহণ করে এবং প্রোজেক্টের কার্য সম্পাদন করে।
আইভি এই কনফিগারেশনে প্যারেন্ট মডিউলের ivy.xml
ফাইল থেকে চাইল্ড মডিউলগুলোর ডিপেনডেন্সি এবং কনফিগারেশন শেয়ার করতে সাহায্য করে।
এখানে একটি উদাহরণ দেখানো হবে যেখানে প্যারেন্ট মডিউল এবং চাইল্ড মডিউল একসাথে কাজ করবে।
প্যারেন্ট মডিউল সাধারণত একটি ivy.xml
ফাইল থাকবে, যেখানে সমস্ত সাধারণ ডিপেনডেন্সি এবং কনফিগারেশন নির্ধারিত থাকবে। এই প্যারেন্ট মডিউলটি চাইল্ড মডিউলগুলোর জন্য ডিপেনডেন্সি শেয়ার করবে।
<ivy-module version="2.0">
<info organisation="com.example" module="parent-module" revision="1.0.0"/>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10"/>
</dependencies>
<!-- Common configuration shared by child modules -->
<configurations>
<conf name="compile" description="Compile dependencies"/>
<conf name="runtime" description="Runtime dependencies"/>
</configurations>
</ivy-module>
এখানে:
commons-lang3
লাইব্রেরির ডিপেনডেন্সি রয়েছে যা চাইল্ড মডিউলগুলোর জন্য শেয়ার করা হবে।compile
এবং runtime
কনফিগারেশন ডিফাইন করা হয়েছে, যা চাইল্ড মডিউলগুলিতে শেয়ার করা যাবে।চাইল্ড মডিউলগুলিতে, আপনি প্যারেন্ট মডিউলটির ডিপেনডেন্সি এবং কনফিগারেশন ব্যবহার করতে পারেন। চাইল্ড মডিউলগুলিতে সাধারণত ivy.xml
ফাইলের মধ্যে প্যারেন্ট মডিউলের রেফারেন্স রাখা হয়।
<ivy-module version="2.0">
<info organisation="com.example" module="child-module" revision="1.0.0"/>
<!-- Inherit dependencies from parent module -->
<dependencies>
<dependency org="com.example" name="parent-module" rev="1.0.0"/>
</dependencies>
<configurations>
<conf name="compile" description="Compile dependencies"/>
</configurations>
</ivy-module>
এখানে:
commons-lang3
লাইব্রেরি ডিপেনডেন্সি ব্যবহার করবে।যখন প্যারেন্ট মডিউলে ডিপেনডেন্সি নির্ধারণ করা হয়, তখন চাইল্ড মডিউলগুলি সেই ডিপেনডেন্সি শেয়ার করে এবং তাদের কাজ চালিয়ে নেয়। এছাড়া, প্যারেন্ট মডিউল থেকে কনফিগারেশনগুলোও শেয়ার করা যায়, যেমন compile
, runtime
, ইত্যাদি।
এটি আপনার প্রোজেক্টে একাধিক সাব-প্রজেক্ট বা মডিউল পরিচালনাকে আরও সহজ এবং সুশৃঙ্খল করে তোলে।
আইভি আপনাকে নির্দিষ্ট করতে দেয় কোন কনফিগারেশনে ডিপেনডেন্সি ব্যবহৃত হবে, যেমন compile
, runtime
, ইত্যাদি। এই কনফিগারেশনগুলো প্যারেন্ট মডিউল থেকে চাইল্ড মডিউলে শেয়ার করা যায়।
<ivy-module version="2.0">
<info organisation="com.example" module="child-module" revision="1.0.0"/>
<!-- Inherit compile and runtime configurations from the parent module -->
<dependencies>
<dependency org="com.example" name="parent-module" rev="1.0.0" conf="compile, runtime"/>
</dependencies>
</ivy-module>
এখানে:
compile
এবং runtime
কনফিগারেশন শেয়ার করছে।একটি পূর্ণাঙ্গ উদাহরণ যেখানে একটি প্যারেন্ট মডিউল এবং দুটি চাইল্ড মডিউল থাকবে, এবং প্যারেন্ট মডিউল চাইল্ড মডিউলগুলির জন্য ডিপেনডেন্সি শেয়ার করবে:
parent-module/ivy.xml
)<ivy-module version="2.0">
<info organisation="com.example" module="parent-module" revision="1.0.0"/>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10"/>
</dependencies>
</ivy-module>
child-module1/ivy.xml
)<ivy-module version="2.0">
<info organisation="com.example" module="child-module1" revision="1.0.0"/>
<dependencies>
<dependency org="com.example" name="parent-module" rev="1.0.0"/>
</dependencies>
</ivy-module>
child-module2/ivy.xml
)<ivy-module version="2.0">
<info organisation="com.example" module="child-module2" revision="1.0.0"/>
<dependencies>
<dependency org="com.example" name="parent-module" rev="1.0.0"/>
</dependencies>
</ivy-module>
এখানে:
parent-module
একটি প্যারেন্ট মডিউল যা একটি ডিপেনডেন্সি (commons-lang3
) সংজ্ঞায়িত করেছে।child-module1
এবং child-module2
) প্যারেন্ট মডিউলটির ডিপেনডেন্সি শেয়ার করেছে।অ্যাপাচি আইভি (Apache Ivy) প্যারেন্ট এবং চাইল্ড মডিউল কনফিগারেশন ব্যবহারের মাধ্যমে বিভিন্ন মডিউলের মধ্যে ডিপেনডেন্সি শেয়ার করা সহজ করে তোলে। এতে আপনি একটি প্যারেন্ট মডিউল থেকে চাইল্ড মডিউলে ডিপেনডেন্সি এবং কনফিগারেশন শেয়ার করতে পারেন, যা প্রকল্পের মডিউলগুলোকে আরও সুশৃঙ্খলভাবে ম্যানেজ করার সুবিধা প্রদান করে।
Apache Ivy একটি ওপেন সোর্স ডিপেনডেন্সি ম্যানেজমেন্ট টুল যা Apache Ant এর সাথে ব্যবহৃত হয়। Ivy মূলত ডিপেনডেন্সি রেজোলিউশন এবং লাইব্রেরি ব্যবস্থাপনা সহজ করে তোলে। Inter-module Dependency Management হল সেই প্রক্রিয়া যেখানে একটি মডিউল অন্য মডিউলের উপর নির্ভরশীল থাকে এবং Ivy এই নির্ভরশীলতা (dependency) ম্যানেজমেন্ট করে। এতে একাধিক মডিউলের মধ্যে সম্পর্ক ও ডিপেনডেন্সি ঠিকভাবে ম্যানেজ করা হয়, যা বৃহৎ এবং জটিল প্রোজেক্টে অত্যন্ত গুরুত্বপূর্ণ।
এটি বিশেষত বড় প্রোজেক্টে ব্যবহৃত হয় যেখানে একাধিক মডিউল (submodules) একে অপরের উপর নির্ভরশীল থাকে এবং তাদের ডিপেনডেন্সি একত্রে রেজোলভ করা হয়। Ivy ব্যবহার করে আপনি এই inter-module ডিপেনডেন্সি সহজভাবে ম্যানেজ করতে পারেন এবং নিশ্চিত করতে পারেন যে সমস্ত মডিউল সঠিকভাবে একে অপরের উপর নির্ভরশীল।
এই নিবন্ধে আমরা Ivy Inter-module Dependency Management কিভাবে কাজ করে এবং কিভাবে এটি কনফিগার করা যায়, তা নিয়ে আলোচনা করব।
Inter-module Dependency Management হল একটি প্রক্রিয়া যেখানে একটি মডিউল অন্য একটি মডিউলের উপর নির্ভরশীল থাকে। উদাহরণস্বরূপ, যদি আপনার প্রোজেক্টে Module A এবং Module B থাকে, এবং Module A যদি Module B এর উপর নির্ভরশীল হয়, তাহলে Ivy এই নির্ভরশীলতা ম্যানেজ করতে সহায়তা করবে। Ivy ivy.xml
ফাইলের মাধ্যমে ডিপেনডেন্সি রেজোলিউশন পরিচালনা করে, এবং আপনার প্রোজেক্টের বিভিন্ন মডিউল একে অপরের উপর নির্ভরশীল হলে তাদের সম্পর্ক এবং ডিপেনডেন্সি সঠিকভাবে ম্যানেজ করে।
Ivy তে Inter-module Dependency ম্যানেজ করার জন্য, আপনাকে ivy.xml
ফাইল ব্যবহার করতে হবে, যেখানে আপনি প্রতিটি মডিউলের জন্য ডিপেনডেন্সি এবং রেপোজিটরি কনফিগার করবেন।
ধরা যাক, আপনার প্রোজেক্টে দুটি মডিউল রয়েছে, Module A এবং Module B। এখানে Module A-র ডিপেনডেন্সি হিসেবে Module B রয়েছে।
Module A এর ivy.xml
ফাইল:
<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0">
<info organisation="com.example" module="module-a" revision="1.0.0"/>
<dependencies>
<!-- Module A depends on Module B -->
<dependency org="com.example" name="module-b" rev="1.0.0"/>
</dependencies>
</ivy-module>
Module B এর ivy.xml
ফাইল:
<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0">
<info organisation="com.example" module="module-b" revision="1.0.0"/>
<dependencies>
<!-- No dependencies for Module B -->
</dependencies>
</ivy-module>
এখানে:
ivy.xml
ফাইলে Module B-র উপর ডিপেনডেন্সি উল্লেখ করা হয়েছে।Ivy-তে Inter-module Dependency ম্যানেজমেন্টে মূলত resolve এবং retrieve টাস্ক ব্যবহৃত হয়। Resolve টাস্ক ডিপেনডেন্সি রেজোলিউশন করে এবং retrieve টাস্ক ডিপেনডেন্সিগুলি সঠিক জায়গায় ডাউনলোড করে।
<project name="multi-module-project" default="resolve">
<taskdef name="ivy" classname="org.apache.ivy.ant.IvyTask"/>
<!-- Resolve dependencies -->
<target name="resolve">
<ivy file="module-a/ivy.xml"/>
<ivy file="module-b/ivy.xml"/>
</target>
<!-- Retrieve dependencies after resolve -->
<target name="retrieve" depends="resolve">
<retrieve pattern="lib/[artifact]-[revision].[ext]"/>
</target>
<!-- Compile the source code -->
<target name="compile" depends="retrieve">
<javac srcdir="src" destdir="build/classes"/>
</target>
</project>
এখানে:
ivy
টাস্কটি Module A এবং Module B-এর ivy.xml
ফাইল থেকে ডিপেনডেন্সি রেজোলভ করবে।resolve
টার্গেটটি Ivy এর মাধ্যমে মডিউলগুলির ডিপেনডেন্সি রেজোলভ করবে।retrieve
টার্গেটটি ডিপেনডেন্সিগুলিকে ডাউনলোড করবে এবং lib/ ফোল্ডারে সংরক্ষণ করবে।Ivy Inter-module Dependency Management-এ বিভিন্ন ধরনের কার্যাবলী সহায়ক:
Ivy Inter-module Dependency Management আপনার প্রোজেক্টের একাধিক মডিউল এবং তাদের ডিপেনডেন্সি সম্পর্ক সঠিকভাবে ম্যানেজ করার একটি শক্তিশালী পদ্ধতি। Ivy ব্যবহার করে আপনি সহজেই একাধিক মডিউলের মধ্যে ডিপেনডেন্সি রেজোলিউশন পরিচালনা করতে পারেন এবং নিশ্চিত করতে পারেন যে আপনার প্রোজেক্টের প্রতিটি মডিউল সঠিকভাবে অন্য মডিউলের উপর নির্ভরশীল। Ivy-তে ivy.xml
ফাইল এবং resolve ও retrieve টাস্ক ব্যবহার করে ডিপেনডেন্সি ম্যানেজমেন্ট এবং ডিপেনডেন্সি রেজোলিউশন সহজভাবে করা যায়।
Apache Ivy-এর সাহায্যে multi-module project তৈরি করা এবং প্রতিটি মডিউলকে আলাদা আলাদাভাবে বিল্ড ও পাবলিশ করা যায়। এটি প্রোজেক্টের বিভিন্ন মডিউলের ডিপেন্ডেন্সি এবং রেজলভেশনকে সঠিকভাবে ম্যানেজ করতে সাহায্য করে। যখন আপনার প্রোজেক্টে একাধিক মডিউল থাকে, তখন আপনি Ivy ব্যবহার করে প্রতিটি মডিউলের জন্য ডিপেন্ডেন্সি রেজলভ, বিল্ড এবং পাবলিশিং প্রক্রিয়া অটোমেটিক করতে পারেন।
একটি multi-module project হলো এমন একটি প্রোজেক্ট যা একাধিক মডিউল বা সাব-প্রোজেক্ট নিয়ে গঠিত। প্রতিটি মডিউল আলাদা আলাদা লাইব্রেরি বা অ্যাপ্লিকেশন হতে পারে, তবে তারা একে অপরের উপর নির্ভরশীল হতে পারে। যেমন, একটি বড় প্রোজেক্ট যা বিভিন্ন মডিউল, ক্লাস, লাইব্রেরি ব্যবহার করে, এবং তাদের মধ্যে ইন্টার-ডিপেন্ডেন্সি থাকতে পারে।
প্রথমে, আমরা একটি multi-module project তৈরি করি যার কয়েকটি মডিউল থাকবে এবং প্রতিটি মডিউল আলাদা আলাদা ডিপেন্ডেন্সি রেজলভ করবে। প্রতিটি মডিউল তাদের নিজস্ব ivy.xml ফাইল ব্যবহার করবে।
ধরা যাক, আমাদের একটি প্রোজেক্টে দুটি মডিউল আছে:
my-multi-module-project/
│
├── module-a/
│ └── ivy.xml
│
├── module-b/
│ └── ivy.xml
│
└── build.xml
module-a এর জন্য একটি ivy.xml ফাইল তৈরি করুন যা এর নির্ভরশীল লাইব্রেরি নির্ধারণ করবে।
module-a/ivy.xml:
<ivy-module version="2.0">
<info organisation="com.example" module="module-a" revision="1.0" />
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.12.0"/>
</dependencies>
</ivy-module>
এখানে:
module-b এর জন্য একটি ivy.xml ফাইল তৈরি করুন, এবং এটিকে module-a এর উপর নির্ভরশীল করুন।
module-b/ivy.xml:
<ivy-module version="2.0">
<info organisation="com.example" module="module-b" revision="1.0" />
<dependencies>
<dependency org="com.example" name="module-a" rev="1.0"/>
</dependencies>
</ivy-module>
এখানে:
এখন, একটি build.xml ফাইল তৈরি করুন যা module-a এবং module-b এর জন্য ডিপেন্ডেন্সি রেজলভ করবে এবং বিল্ড করবে।
build.xml:
<project name="MultiModuleBuild" default="resolve-dependencies" basedir=".">
<taskdef name="ivy" classname="org.apache.ivy.ant.IvyTask"/>
<!-- Resolve dependencies for module-a -->
<target name="resolve-module-a">
<ivy:resolve file="module-a/ivy.xml"/>
<ivy:retrieve file="module-a/ivy.xml"/>
</target>
<!-- Resolve dependencies for module-b -->
<target name="resolve-module-b">
<ivy:resolve file="module-b/ivy.xml"/>
<ivy:retrieve file="module-b/ivy.xml"/>
</target>
<!-- Build module-a -->
<target name="build-module-a" depends="resolve-module-a">
<echo message="Building module-a"/>
<!-- Module-a build commands (like compiling) can be added here -->
</target>
<!-- Build module-b -->
<target name="build-module-b" depends="resolve-module-b">
<echo message="Building module-b"/>
<!-- Module-b build commands (like compiling) can be added here -->
</target>
<!-- Default target that builds all modules -->
<target name="resolve-dependencies" depends="build-module-a, build-module-b"/>
</project>
এখানে:
এখন, Ant কমান্ড ব্যবহার করে স্ক্রিপ্টটি চালাতে হবে:
ant resolve-dependencies
এটি module-a এবং module-b এর ডিপেন্ডেন্সি রেজলভ করবে এবং তাদের ডাউনলোড করবে।
Multi-module project পাবলিশ করার জন্য, আপনাকে প্রতিটি মডিউল আলাদাভাবে Ivy এর মাধ্যমে রিপোজিটরিতে পাবলিশ করতে হবে। Ivy টাস্কের মাধ্যমে এটি সম্ভব।
module-a এবং module-b উভয় মডিউলের জন্য publish টাস্ক তৈরি করতে হবে।
build.xml এ publish টাস্ক যুক্ত করা:
<target name="publish-module-a">
<ivy:publish file="module-a/ivy.xml" settings="ivysettings.xml"/>
</target>
<target name="publish-module-b">
<ivy:publish file="module-b/ivy.xml" settings="ivysettings.xml"/>
</target>
<target name="publish-all" depends="publish-module-a, publish-module-b">
<echo message="All modules published successfully"/>
</target>
এখানে:
এখন, Ant স্ক্রিপ্টের মাধ্যমে উভয় মডিউল রিপোজিটরিতে পাবলিশ করা যাবে:
ant publish-all
এটি module-a এবং module-b উভয়কে নির্দিষ্ট রিপোজিটরিতে পাবলিশ করবে।
এখন, যদি আপনার multi-module project Ivy repository তে পাবলিশ করা থাকে, তাহলে আপনি অন্য প্রোজেক্টে সহজেই সেই মডিউলগুলিকে ডিপেন্ডেন্সি হিসেবে যুক্ত করতে পারবেন।
ivy.xml এ অন্য প্রোজেক্টে multi-module project ব্যবহার করার উদাহরণ:
<ivy-module version="2.0">
<info organisation="com.example" module="other-project"/>
<dependencies>
<dependency org="com.example" name="module-a" rev="1.0"/>
<dependency org="com.example" name="module-b" rev="1.0"/>
</dependencies>
</ivy-module>
এখানে:
Ivy ব্যবহার করে multi-module project তৈরি এবং পাবলিশ করা খুবই সহজ। আপনি প্রতিটি মডিউলের জন্য আলাদা ivy.xml ফাইল তৈরি করতে পারেন এবং তাদের জন্য ডিপেন্ডেন্সি রেজলভ এবং বিল্ড করতে পারেন। Ant বিল্ড স্ক্রিপ্টে Ivy টাস্ক ব্যবহার করে multi-module project এর জন্য ডিপেন্ডেন্সি রেজলভ এবং পাবলিশিং প্রক্রিয়া পরিচালনা করা যায়। Ivy এর মাধ্যমে multi-module project ম্যানেজমেন্ট আরও সহজ, কার্যকরী, এবং সুসংগঠিত হয়।
common.read_more